#include<iostream>
using namespace std;
//const int N = 5e5 + 10;
//int tree[N][26], e[N], end2[N];
//int n, m,index;
//
//void insert(string& s)
//{
//	int cur = 0;
//	for (auto v : s)
//	{
//		int path = v - 'a';
//		if (tree[cur][path] == 0)tree[cur][path] = ++index;
//		cur = tree[cur][path];
//	}
//	e[cur]++;
//}
//
//string find(string& s)
//{
//	int cur = 0;
//	for (auto v : s)
//	{
//		int path = v - 'a';
//		if (tree[cur][path] == 0)return "WRONG";
//		cur = tree[cur][path];
//	}
//	if (e[cur] == 0)return"WRONG";
//	if (end2[cur] < e[cur]) {
//		end2[cur]++;
//		return "OK";
//	}
//	return "REPEAT";
//}
//
//int main()
//{
//	cin >> n;
//	string s;
//	while (n--)
//	{
//		cin >> s;
//		insert(s);
//	}
//	cin >> m;
//	while (m--)
//	{
//		cin >> s;
//		cout << find(s) << endl;
//	}
//	return 0;
//}

const int N = 1e5 + 10;
int tree[N * 32][2], arr[N];
int index, n, ret;

void insert(int a)
{
	int cur=0;
	for (int i = 31; i >= 0; i--)
	{
		int path = (a >> i) & 1;
		if (tree[cur][path] == 0)tree[cur][path] = ++index;
		cur = tree[cur][path];
	}
}

int find(int a)
{
	int cur = 0;
	int r=0;
	for (int i = 31; i >= 0; i--)
	{
		int path = (a >> i) & 1;
		if (tree[cur][path^1]) {
			r |= (1 << i);
			cur = (tree[cur][path^1]);
		}
		else 
		cur = tree[cur][path];
	}
	return r;
}
int main()
{
	cin >> n;
	for (int i = 0; i < n; i++)
	{
		cin >> arr[i];
		insert(arr[i]);
	}
	for (int i = 0; i < n; i++)
	{
		ret = max(ret, find(arr[i]));
	}
	cout << ret << endl;
	return 0;
}